home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / compuserve-file-archive / 05 Programming / SHLRAM.SDA / TWINCOPY.C < prev   
Text File  |  2019-04-13  |  4KB  |  213 lines

  1. #INCLUDE <STDIO.H>
  2.  
  3. CHAR INDEV;
  4. CHAR OUTDEV;
  5. CHAR VERBOSE;
  6. MAIN(ARGC,ARGV)
  7. UNSIGNED ARGC;
  8. CHAR **AV;
  9.   INT FCOPY();
  10.   UNSIGNED I;
  11.   CHAR **ARGV;
  12.  
  13.   ARGV = AV;
  14.   ARGC = INIT(ARGC,&ARGV);
  15.   FOR (I = 1; I < ARGC; ++I)
  16.     GLOB(ARGV[I],&FCOPY);
  17.  
  18. INIT(ARGC,ARGV)
  19.   EXTERN CHAR SYSDEV, WRKDEV;
  20.  
  21.  
  22.   INDEV = SYSDEV;
  23.   OUTDEV = WRKDEV;
  24.   VERBOSE = 0;
  25.   RETURN ARGC;
  26.  
  27. /*
  28.  * EVENTUALLY MAKE THIS INVOKE FUNCTION
  29.  * FOR EACH FILE IN THE WORK DIRECTORY
  30.  * WHICH MATCHES "PATTERN"
  31.  *
  32.  * CAVEAT: OPENDIR() DOES NOT WORK WITH
  33.  *  ╥┴═ DISK
  34.  * 2ND CAVEAT: WE COPY ╞╥╧═ SYSTEM DISK
  35.  */
  36. GLOB(PATTERN, PFUNC)
  37. CHAR *PATTERN;
  38. INT (*PFUNC)();
  39.   (*PFUNC)(PATTERN);
  40.  
  41. #DEFINE ├╚╦╔╬ 0XFFC6
  42. #DEFINE ├╚╦╧╒╘ 0XFFC9
  43. #DEFINE ├╠╥├╚╬ 0XFFCC
  44. STATIC CHAR BLFLAG;
  45. STATIC CHAR MLGETB[] = █
  46. 0X20, 0X├╞, 0X╞╞, /* T1 JSR   CHRIN   */
  47. 0X91, 0X╞┬,       /*    STA   ($FB),Y */
  48. 0X├8,             /*    INY           */
  49. 0X20, 0X┬7, 0X╞╞, /*    JSR   READST  */
  50. 0X─0, 0X04,       /*    BNE   T2      */
  51. 0X├4, 34,         /*    CPY   34      */
  52. 0X─0, 0X╞1,       /*    BNE   T1      */
  53. 0X60,             /* T2 RTS           */
  54. ▌;
  55. UNSIGNED
  56. GETBLK(BUFFER, SIZE, FID)
  57. CHAR *BUFFER;
  58. UNSIGNED SIZE;
  59. ╞╔╠┼ FID;
  60.   STATIC CHAR A, X, Y;
  61.   UNSIGNED N;
  62.  
  63.   IF (BLFLAG) RETURN 0;
  64.   /* ZERO PAGE USAGE:  SEE ╨OWER ├ ═ANUAL */
  65.   *((CHAR **)0XFB) = BUFFER;
  66.   *((CHAR *)34) = SIZE;
  67.   SYS(├╠╥├╚╬, &A, &X, &Y);
  68.   X = FID;
  69.   SYS(├╚╦╔╬, &A, &X, &Y);
  70.   Y = 0;
  71.   SYS(MLGETB, &A, &X, &Y);
  72.   N = Y;
  73.   IF (A != 0) BLFLAG = A;
  74.   SYS(├╠╥├╚╬, &A, &X, &Y);
  75.   RETURN N;
  76.  
  77. STATIC CHAR MLPUTB[] = █
  78. 0X┬1, 34,         /* T1 LDA   (34),Y  */
  79. 0X20, 0X─2, 0X╞╞, /*    JSR   CHROUT  */
  80. 0X├8,             /*    INY           */
  81. 0X├4, 0X╞┬,       /*    CPY   $FB     */
  82. 0X─0, 0X╞6,       /*    BNE   T1      */
  83. 0X60,             /*    RTS           */
  84. ▌;
  85.  
  86. UNSIGNED
  87. PUTBLK(BUFFER, N, FID)
  88. CHAR *BUFFER;
  89. UNSIGNED N;
  90. ╞╔╠┼ FID;
  91.   STATIC CHAR A, X, Y;
  92.  
  93.   IF (N == 0) RETURN 0;
  94.   *((CHAR **)34) = BUFFER;
  95.   *((CHAR *)0XFB) = N;
  96.   SYS(├╠╥├╚╬, &A, &X, &Y);
  97.   X = FID;
  98.   SYS(├╚╦╧╒╘, &A, &X, &Y);
  99.   Y = 0;
  100.   SYS(MLPUTB, &A, &X, &Y);
  101.   SYS(├╠╥├╚╬, &A, &X, &Y);
  102.   RETURN N;
  103.  
  104. STATIC CHAR BUFF[256];
  105. INT
  106. FCOPY(NAME)
  107. CHAR *NAME;
  108.   ╞╔╠┼ OPENIN(), OPENOUT();
  109.   ╞╔╠┼ INFID, OUTFID;
  110.   UNSIGNED N;
  111.   AUTO UNSIGNED TYPE;
  112.  
  113.   TYPE = 0;
  114.   IF (VERBOSE)
  115.     PRINTF("COPY %S FROM DEVICE %D TO WORK\N",NAME,INDEV);
  116.   INFID = 5;
  117.   IF ((INFID = OPENIN(INDEV,3,NAME,&TYPE)) == 0)
  118.     PRINTF("CAN'T OPEN %S FOR INPUT\N", NAME);
  119.   ELSE IF ((OUTFID = OPENOUT(NAME,TYPE)) == 0 ▀▀
  120.     FERROR())
  121.     PRINTF("CAN'T OPEN %S FOR OUTPUT\N", NAME);
  122.   ELSE █
  123. /*
  124.  * SORRY, THIS ISN'T FAST ENOUGH!
  125.  *
  126.  *  WHILE((C = FGETC(INFID)) != ┼╧╞)
  127.  *    FPUTC(C, OUTFID);
  128.  */
  129.     BLFLAG = 0;
  130.     WHILE ((N = GETBLK(BUFF,254,INFID)) != 0)
  131.       PUTBLK(BUFF,N,OUTFID);
  132.   ▌
  133.   FCLOSE(INFID);
  134.   FCLOSE(OUTFID);
  135.  
  136. /*
  137.  * OPENIN - SPECIAL
  138.  *   OPENS FILE ON GIVEN DEVICE, AND
  139.  *   ATTEMPTS TO DETERMINE INPUT TYPE
  140.  *   BY THE ICKY METHOD OF REPEATED
  141.  *   OPEN ATTEMPTS
  142.  *
  143.  * UNFORTUNATELY THIS WILL BE SLOW
  144.  */
  145. OPENIN(DEV,SECADD,NAME,PTYPE)
  146. UNSIGNED DEV;
  147. UNSIGNED SECADD;
  148. CHAR *NAME;
  149. UNSIGNED *PTYPE;
  150.   EXTERN CHAR WRKDEV;
  151.   AUTO CHAR NAMBUF[30];
  152.   REGISTER ╞╔╠┼ RFID;
  153.   REGISTER CHAR *TSTR;
  154.   REGISTER UNSIGNED FE;
  155.  
  156.   DEVICE(DEV);
  157.   *PTYPE = 0;
  158.   TSTR = INDEX(NAME, ',');
  159.   IF (TSTR != ╬╒╠╠ &&
  160.     *++TSTR != '\0' && *TSTR != 'R') █
  161.     RFID = FOPEN(NAME,"R");  /* LEAVE *PTYPE 0 */
  162.     DEVICE(WRKDEV);
  163.     RETURN RFID;
  164.   ▌
  165.  
  166.   FOR (TSTR = "SPU"; *TSTR != '\0'; ++TSTR) █
  167.     SPRINTF(NAMBUF,"%S,%C", NAME, *TSTR);
  168.     RFID = FOPEN(NAMBUF,"R");
  169.     FE = FERROR();
  170.     IF (RFID != 0 && FE == 0) █
  171.       *PTYPE = *TSTR;
  172.       DEVICE(WRKDEV);
  173.       RETURN RFID;
  174.     ▌
  175.     ELSE
  176.       FCLOSE(RFID);
  177.   ▌
  178.   DEVICE(WRKDEV);
  179.   RETURN 0;
  180.  
  181. /*
  182.  * OPENOUT - SPECIAL TO DO FOPEN OF
  183.  *  SPECIFIED TYPE
  184.  */
  185. ╞╔╠┼
  186. OPENOUT(NAME,TYPE)
  187. CHAR *NAME;
  188. UNSIGNED TYPE;
  189.   AUTO CHAR NAMBUF[30];
  190.  
  191.   IF (TYPE != 0) █
  192.     SPRINTF(NAMBUF,"%S,%C", NAME, TYPE);
  193.     NAME = NAMBUF;
  194.   ▌
  195.   RETURN FOPEN(NAME,"W");
  196.   
  197.